/*
题目：编写一个程序，循环给出任意两个正整数的最大公约数和最小公倍数，并打印出来，直到输入0，程序结束。
提示1：最大公约数是基础，先求出最大公约数，最小公倍数就可以一步求解到位了！
提示2：虽然最大公约数有很多种解法，如暴力从1到最小的那个整数去试除，但这不是最好的方法，建议采用辗转相除法（不记得的同学查看数学书）！
输入格式：两个正整数不超过2^31 - 1，且用空格隔开。
输出格式：分别输出最大公约数和最小公倍数，用空格隔开。
输入样例：
5 7
24 12
0
输出样例：
1 35
12 24
*/
#include<stdio.h>
int gcd(int a, int b);   //声明函数 gcd 
int lcm(int a, int b);   //声明函数 lcm 
int main() 
{
    int num1, num2;
    while (1) 
{ 
    scanf("%d", &num1);     //此处输入第一个数
     if (num1 == 0 )    //满足题设要求 当第一个数是0时，退出while循环
 {
    break; 
 }

 
 scanf("%d", &num2);     //此处输入第二个数
 
 int g = gcd(num1, num2);   //此处引用函数 gcd
 int l = lcm(num1, num2);   //此处引用函数 lcm
 
 printf("%d %d\n", g, l);  //输出结果
 }
 
 return 0;
}
//此处开始定义函数
int gcd(int a, int b) {
 if (b == 0) {    //如果b是0，则a 和b 的最大公约数是a
 return a;
 }
 return gcd(b, a % b);   //此处用的是辗转相除法，直到 a % b = 0
}

int lcm(int a, int b) {
 return a * b / gcd(a, b); //两个数的最小公倍数除以最大公约数的结果等于这两个数的乘积除以它们的最大公约数
}